package com.xb.system.config;

import com.xb.system.Interceptor.JwtInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    private JwtInterceptor jwtInterceptor;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /** Service页面图片上传路径（后台系统上传的图片） */
        registry.addResourceHandler("/profile/service/images/**")
                .addResourceLocations("file:D:/jlh/service/images/");
        
        /** 广告图片上传路径 */
        registry.addResourceHandler("/profile/advertisement/**")
                .addResourceLocations("file:D:/jlh/uploadPath/advertisement/");
        
        /** 后台系统上传路径（若依默认上传路径） */
        registry.addResourceHandler("/profile/upload/**")
                .addResourceLocations("file:D:/jlh/uploadPath/upload/");
    }
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
    /**
     * 配置跨域请求
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                // 允许的域名
                .allowedOrigins(
                    "http://hy.shuhailinghang.cn", 
                    "https://hy.shuhailinghang.cn",
                    "http://localhost:5173"  // 开发环境
                )
                // 允许的HTTP方法
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                // 允许的请求头
                .allowedHeaders("*")
                // 是否允许发送Cookie
                .allowCredentials(true)
                // 预检请求的有效期，单位为秒
                .maxAge(3600);
    }


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(jwtInterceptor)
                .addPathPatterns("/**") // 拦截所有请求
                .excludePathPatterns(
                        "/images/**",
                        "/profile/**",       // 排除所有profile路径（包括service/images和advertisement）
                        "/auth/**",
                        "/agreement/**",
                        "/internal/**",              // 排除内部API（仅供若依项目调用）                        "/checksystem/advertisement/enabled", // 排除广告接口
                        "/payment/wechatNotify",     // 排除微信支付回调
                        "/payment/alipayNotify",     // 排除支付宝回调
                        "/doc.html",          // 放行 Knife4j 的文档页面
                        "/webjars/**",       // 放行 Knife4j 的静态资源（如 JS、CSS）
                        "/v2/api-docs",       // 放行 Knife4j 的 API 文档 JSON 数据
                        "/swagger-resources", // 放行 Knife4j 的 Swagger 资源
                        "/swagger-resources/**", // 放行 Knife4j 的 Swagger 资源路径
                        "/favicon.ico"       // 放行 Knife4j 的图标
                );
    }


} 